package com.hqyj.websocket;

import org.springframework.stereotype.Component;

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @Description 消息提示服务
 * @Autor 伍军
 * @Date 2022/11/3 11:41
 * @Version 1.0
 **/
@Component
@ServerEndpoint(value = "/message")//定义访问服务的地址
public class MessageServieWebSocket {
    //记录所有客户端
    private  static List<Session> list = new ArrayList<>();
    /**
     *  @OnOpen:服务开启事件
     * @param session 客户端会话
     */
    @OnOpen
    public void open(Session session){
        System.out.println("客户端编号:"+session.getId()+"开启");
        //添加客户端
        list.add(session);
    }

    /**
     *  @OnClose：服务关闭事件
     * @param session 客户端会话
     */
    @OnClose
    public void colse(Session session){
        System.out.println("客户端编号:"+session.getId()+"关闭");
        //移除客户端
        list.remove(session);
    }

    /**
     * @OnMessage:接收客户端发送来的消息触发事件
     * @param s 发送消息的客户端的会话
     * @param msg 消息
     */
   @OnMessage
   public void message(Session s,String msg) throws IOException {
       System.out.println("客户端编号:"+s.getId()+"发送的消息"+msg);
       //查询所有用户客户端
       for(Session ss:list){
           //判断客户端是否在线
           if(ss.isOpen()){
               //发送消息给所有在线的客户端
               ss.getBasicRemote().sendText(msg);
           }
       }
   }

    /**
     * @OnError：客户端连接服务端出现异常触发的事件
     * @param s 异常客户端的会话
     * @param throwable 异常信息
     */
   @OnError
    public void error(Session s,Throwable throwable){
       System.out.println("客户端编号:"+s.getId()+"出现异常"+throwable);
   }

}
